Saltar al contenido principal

5.3 Funciones Anónimas

En Python, además de las funciones definidas con def, existen las llamadas funciones anónimas o funciones lambda. Se denominan así porque no tienen nombre propio y suelen utilizarse para operaciones simples y de corta duración. Son muy útiles cuando se necesita una función como argumento dentro de otra, sin necesidad de declararla por separado.

Las funciones lambda están estrechamente relacionadas con la programación funcional, ya que permiten tratar las funciones como valores que se pueden almacenar en variables, pasar como argumento o devolver desde otras funciones.


1️⃣ ¿Qué es una función anónima?​

Una función anónima es una función definida en una sola línea, mediante la palabra clave lambda. No necesita la palabra def, ni un nombre, ni un bloque indentado.

Sintaxis general​

✍️ Sintaxis básica de una función lambda
lambda parámetros: expresión
en este ejemplo
  • lambda indica que se está creando una función anónima.
  • Los parámetros son los valores que recibe, separados por comas.
  • La expresión es el resultado que devuelve automáticamente (no se usa return).

Ejemplo práctico​

Ejemplo básico de función lambda
doble = lambda x: x * 2
print(doble(5)) # 10
en este ejemplo
  • Aquí doble almacena una función anónima que multiplica por 2 el valor recibido.
  • Al llamarla con doble(5), devuelve 10.
  • Aunque la función no tiene nombre propio, la hemos asignado a la variable doble para poder usarla.

2️⃣ Comparación con funciones definidas con def​

Una función lambda es similar a una función normal, pero más compacta. Ambas realizan la misma tarea, aunque su forma de escritura difiere.

Comparación entre def y lambda
def cuadrado(n):
return n ** 2

cuadrado_lambda = lambda n: n ** 2

print(cuadrado(4))
print(cuadrado_lambda(4))
en este ejemplo

Ambas funciones devuelven el cuadrado de un número.

La diferencia es que la versión con def es más explícita y puede incluir documentación o varias líneas de código, mientras que lambda se usa para expresiones simples en una única línea.


3️⃣ Uso de lambdas como argumento de otras funciones​

Una de las principales ventajas de las funciones lambda es que pueden utilizarse como argumento en otras funciones. Esto se aplica con frecuencia junto a funciones como map(), filter() o sorted(), que requieren otra función como parámetro.

🟩 Uso con map()​

map() aplica una función a cada elemento de un iterable (como una lista) y devuelve un nuevo iterable con los resultados.

Uso de lambda con map()
numeros = [1, 2, 3, 4, 5]
cuadrados = list(map(lambda x: x ** 2, numeros))
print(cuadrados)
en este ejemplo

map() recorre la lista numeros y aplica la función lambda x: x ** 2 a cada elemento. El resultado es una nueva lista [1, 4, 9, 16, 25].

🟦 Uso con filter()​

filter() selecciona los elementos de una colección que cumplen una condición booleana.

Uso de lambda con filter()
numeros = [10, 15, 20, 25, 30]
pares = list(filter(lambda x: x % 2 == 0, numeros))
print(pares)
en este ejemplo

filter() aplica la función lambda x: x % 2 == 0 a cada elemento. Solo se conservan los que cumplen la condición (es decir, los números pares): [10, 20, 30].

🟨 Uso con sorted()​

La función sorted() permite ordenar listas o secuencias. El parámetro key especifica una función que se usará para determinar el criterio de ordenación.

Uso de lambda con sorted()
palabras = ["zorro", "perro", "gato", "elefante"]
ordenadas = sorted(palabras, key=lambda p: len(p))
print(ordenadas)
en este ejemplo

La función lambda p: len(p) indica que los elementos deben ordenarse según su longitud. El resultado será ['gato', 'perro', 'zorro', 'elefante'].


4️⃣ Lambdas con múltiples parámetros​

Una función lambda puede recibir varios parámetros, separados por comas, al igual que una función normal.

Función lambda con varios parámetros
suma = lambda a, b, c: a + b + c
print(suma(2, 3, 4))
en este ejemplo

La función recibe tres valores y devuelve su suma. Este tipo de lambdas es útil para realizar operaciones rápidas que no necesitan ser reutilizadas más de una vez.


5️⃣ Limitaciones de las funciones lambda​

Aunque las lambdas son prácticas y compactas, presentan ciertas limitaciones frente a las funciones definidas con def:

  1. Solo pueden contener una expresión, no varias sentencias.
  2. No pueden incluir docstrings ni anotaciones de tipo.
  3. No pueden realizar acciones complejas, como bucles o condicionales extensos.
  4. Suelen usarse en contextos donde se requiere una función pequeña y desechable.

Ejemplo de mala práctica:

Ejemplo de lambda innecesariamente compleja
# No recomendable
compleja = lambda x: x * 2 if x > 0 else -x / 2
en este ejemplo

Aunque funciona, la legibilidad es pobre. Cuando el código se vuelve más complejo, es preferible usar def.


6️⃣ Aplicaciones prácticas de lambdas​

Las funciones lambda son especialmente útiles en combinación con otras herramientas de Python que operan sobre secuencias o colecciones.

🟩 Ejemplo 1: cálculo rápido​

Ejemplo práctico de cálculo rápido con lambda
temperaturas_c = [0, 20, 37, 100]
temperaturas_f = list(map(lambda c: c * 9 / 5 + 32, temperaturas_c))
print(temperaturas_f)
en este ejemplo

Convierte una lista de temperaturas en grados Celsius a Fahrenheit usando una sola línea con map() y lambda.

🟦 Ejemplo 2: filtrado de datos​

Filtrado de valores con lambda y filter
valores = [5, -3, 8, 0, -2, 7]
positivos = list(filter(lambda x: x > 0, valores))
print(positivos)
en este ejemplo

Selecciona únicamente los números positivos de la lista valores.

🟨 Ejemplo 3: ordenación personalizada​

Ordenación personalizada con lambda
personas = [
("Ana", 28),
("Luis", 22),
("María", 35)
]

ordenadas = sorted(personas, key=lambda p: p[1])
print(ordenadas)
en este ejemplo

La función lambda p: p[1] indica que la lista debe ordenarse por la edad (segundo elemento de la tupla). El resultado será [('Luis', 22), ('Ana', 28), ('María', 35)].


7️⃣ Cuándo usar y cuándo evitar lambdas​

✅ Usar funciones lambda cuando:

  • Se necesita una función simple y corta.
  • Se pasa como argumento a map(), filter(), sorted() u otras funciones similares.
  • No es necesario reutilizarla varias veces.

❌ Evitar funciones lambda cuando:

  • La función requiere más de una instrucción o lógica compleja.
  • Se necesita documentar o tipar los parámetros.
  • La legibilidad puede verse comprometida.

Las funciones lambda son una herramienta útil para escribir código conciso y expresivo. Usadas correctamente, aportan claridad en operaciones simples; pero si se abusa de ellas, pueden reducir la legibilidad del programa.

🧩 Practica las funciones anónimas​

Las expresiones lambda o funciones anónimas son un recurso muy util pero requiere práctica.

Prueba a realizar estos retos y mejora tu habilidad ... Descarga el archivo para practicar

Puedes consultar las soluciones aquí